Package com.odb.core.service

Source Code of com.odb.core.service.OpenDashBoard

/*******************************************************************************
* Copyright (c) 2012, Nabeel Shaheen 
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification, are permitted
******************************************************************************/
package com.odb.core.service;

import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.sql.SQLException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;

import org.apache.log4j.Logger;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

import com.odb.core.SubscriberDataSource;
import com.odb.core.dao.ODBDAO;
import com.odb.core.dao.dto.DataSourceAxisDetailInfo;
import com.odb.core.dao.dto.DataSourceAxisInfo;
import com.odb.core.dao.dto.DataSourceInfo;
import com.odb.core.dao.dto.DataSourceSeries;
import com.odb.core.dao.dto.PublisherInfo;
import com.odb.core.dao.dto.SubscriberInfo;
import com.odb.core.dao.dto.ViewConfiguration;
import com.odb.core.service.exceptions.InvalidAuthenticationException;

/**
* The Class OpenDashBoard.
*
* This class is the main service for the Open Dashboard system
*
*/
public class OpenDashBoard {

  /** The odb dao. */
  private ODBDAO odbDAO;

  private String pushURL;

  /** The log. */
  private static Logger log = Logger.getLogger(OpenDashBoard.class);

  /**
   * Sets the odb dao.
   *
   * @param odbDAO
   *            the new odb dao
   */
  public void setOdbDAO(ODBDAO odbDAO) {
    this.odbDAO = odbDAO;
  }

  /**
   * Subscriber login.
   *
   * @param username
   *            the username
   * @param password
   *            the password
   * @return the subscriber info
   */
  public SubscriberInfo subscriberLogin(String username, String password) throws InvalidAuthenticationException {
    SubscriberInfo subInfo = null;
    try {
      subInfo = odbDAO.subscriberLogin(username, password);
      if (subInfo == null)
        throw new InvalidAuthenticationException("Invalid Credentials");
    } catch (SQLException e) {
      log.error("Subscriber Login failed..." + e);
    }
    return subInfo;
  }

  /**
   * Register publisher.
   *
   * @param pubName
   *            the publisher name
   * @return the string publisher Id
   * @throws SQLException
   *             the sQL exception
   */
  public String registerPublisher(String pubName) throws SQLException {
    PublisherInfo pInfo = new PublisherInfo();
    String pubID = pubName + "_" + System.currentTimeMillis();
    pInfo.setPublisherID(pubID);
    pInfo.setPublisherName(pubName);
    odbDAO.addPublisher(pInfo);
    return pubID;
  }

  /**
   * Register data source.
   *
   *
   * @param pubID
   *            the publisher id
   * @param dsConfig
   *            the data source configuration
   * @return the string
   * @throws SQLException
   *             the sQL exception
   */
  @Transactional(propagation = Propagation.MANDATORY)
  public String registerDataSource(DataSourceConfiguration dsConfig) throws SQLException {
    String dsID = dsConfig.getPublisherID() + "_" + System.currentTimeMillis();
    DataSourceInfo dsInfo = new DataSourceInfo();
    dsInfo.setPublisherID(dsConfig.getPublisherID());
    dsInfo.setDataSourceID(dsID);
    dsInfo.setDataSourceName(dsConfig.getDsName());
    dsInfo.setTimeoutInterval(dsConfig.getDsTimeoutInterval());
    dsInfo.setSeriesCount(dsConfig.getSeriesCount());
    odbDAO.addDataSource(dsInfo);

    for (int i = 0; i < dsConfig.getXsInfo().size(); i++) {
      DataSourceAxisInfo dsAxisInfo = new DataSourceAxisInfo();
      dsAxisInfo.setDataSourceID(dsID);
      dsAxisInfo.setDataSourceAxisID(dsID + "_" + System.currentTimeMillis());
      dsAxisInfo.setDataSourceAxisName(dsConfig.getXsInfo().get(i).getDataSourceAxisName());
      dsAxisInfo.setDataSourceAxisType(dsConfig.getXsInfo().get(i).getDataSourceAxisType());
      odbDAO.addDataSourceAxis(dsAxisInfo);
      ArrayList<String> axisLabels = dsConfig.getXsInfo().get(i).getAxisLabels();

      for (int j = 0; j < axisLabels.size(); j++) {
        DataSourceAxisDetailInfo dsAxisDetailInfo = new DataSourceAxisDetailInfo();
        dsAxisDetailInfo.setDataSourceAxisID(dsAxisInfo.getDataSourceAxisID());
        dsAxisDetailInfo.setAxisLabelIndex(j);
        dsAxisDetailInfo.setAxisLabelValue(axisLabels.get(j));
        odbDAO.addDataSourceAxisDetail(dsAxisDetailInfo);
      }
    }
    return dsID;
  }

  /**
   * Adds the data series.
   *
   * @param pubID
   *            the publisher id
   * @param dsID
   *            the data source id
   * @param userData
   *            the user data
   * @throws SQLException
   *             the sQL exception
   */
  public void addDataSeries(String pubID, String dsID, Map<String, Double> userData) throws SQLException {
    Iterator<String> it = userData.keySet().iterator();
    while (it.hasNext()) {
      DataSourceSeries dsSeries = new DataSourceSeries();
      dsSeries.setDataSourceID(dsID);
      String seriesNum = it.next();
      dsSeries.setSeriesIndex(seriesNum);
      dsSeries.setSeriesIndexSeqVal(userData.get(seriesNum));
      dsSeries.setDateTime(new Timestamp(System.currentTimeMillis()));
      odbDAO.addSeriesData(dsSeries);
    }
    publish(dsID);
  }

  public PublisherInfo getPublisher(String publisherIDthrows SQLException {
    return odbDAO.getPublisherByID(publisherID);
  }

  /**
   * Gets the all publishers.
   *
   * @return the all publishers
   * @throws SQLException
   *             the sQL exception
   */
  public ArrayList<PublisherInfo> getAllPublishers() throws SQLException {
    return odbDAO.getAllPublishers();
  }

  /**
   * Gets the latest series data.
   *
   * @param dsID
   *            the ds id
   * @param rowNum
   *            the row num
   * @return the latest series data
   */
  public List<DataSourceSeries> getLatestSeriesData(String dsID, int rowNum) {
    List<DataSourceSeries> dsList = null;
    try {
      dsList = odbDAO.getLatestSeriesData(dsID, rowNum);
    } catch (SQLException e) {
      log.error("Getting Data Series Failed for datasource ID:" + dsID + e);
    }

    return dsList;
  }

  /**
   * Gets the all data source by subscriber ID.
   *
   * @param pubID
   *            the pub id
   * @return the all data source by subscriber
   * @throws SQLException
   *             the sQL exception
   */
  public ArrayList<DataSourceInfo> getAllDataSourceBySubscriber(String subscriberID) throws SQLException {
    return odbDAO.getAllDataSourceBySubscriberID(subscriberID);
  }

  /**
   * Gets the all data source by publisher.
   *
   * @param pubID
   *            the pub id
   * @return the all data source by publisher
   * @throws SQLException
   *             the sQL exception
   */
  public ArrayList<DataSourceInfo> getAllDataSourceByPublisher(String pubID) throws SQLException {
    return odbDAO.getAllDataSourceByPublisherID(pubID);
  }

  /**
   * Gets the data source by data source id.
   *
   * @param dsID
   *            the ds id
   * @return the data source by data source id
   * @throws SQLException
   *             the sQL exception
   */
  public DataSourceInfo getDataSourceByDataSourceID(String dsID) throws SQLException {
    return odbDAO.getDataSourceByDataSourceID(dsID);
  }

  /**
   * Gets the data source configuration by.
   *
   * @param dsID
   *            the ds id
   * @return the data source configuration by
   * @throws SQLException
   *             the sQL exception
   */
  public DataSourceConfiguration getDataSourceConfigurationBy(String dsID) throws SQLException {
    DataSourceConfiguration dsConfig = new DataSourceConfiguration();
    DataSourceInfo dsInfo = odbDAO.getDataSourceByDataSourceID(dsID);
    dsConfig.setDsName(dsInfo.getDataSourceName());
    dsConfig.setDsTimeoutInterval(dsInfo.getTimeoutInterval());
    dsConfig.setSeriesCount(dsInfo.getSeriesCount());
    dsConfig.setPublisherID(dsInfo.getPublisherID());
    dsConfig.setDsID(dsID);
    List<DataSourceAxisInfo> dsAxisInfoAll = odbDAO.getDataSourceAxisInfo(dsID);
    List<AxisInfo> xsInfoAll = new ArrayList<AxisInfo>();
    for (int i = 0; i < dsAxisInfoAll.size(); i++) {
      DataSourceAxisInfo dsAxisInfo = dsAxisInfoAll.get(i);
      AxisInfo xsInfo = new AxisInfo();
      xsInfo.setDataSourceAxisName(dsAxisInfo.getDataSourceAxisName());
      xsInfo.setDataSourceAxisType(dsAxisInfo.getDataSourceAxisType());
      List<DataSourceAxisDetailInfo> dsAxisInfoDetailAll = odbDAO.getDataSourceAxisDetailInfoListBy(dsAxisInfo.getDataSourceAxisID());
      List<String> axisLabels = new ArrayList<String>();
      for (int j = 0; j < dsAxisInfoDetailAll.size(); j++) {
        DataSourceAxisDetailInfo dsAxisInfoDetail = dsAxisInfoDetailAll.get(j);
        axisLabels.add(dsAxisInfoDetail.getAxisLabelValue());
      }
      xsInfo.setAxisLabels((ArrayList<String>) axisLabels);
      xsInfoAll.add(xsInfo);

    }
    dsConfig.setXsInfo((ArrayList<AxisInfo>) xsInfoAll);
    return dsConfig;
  }

  /**
   * Publish.
   *
   * this function is calling the publish action on the Dashboard view module
   *
   * the publish action will update the view with the new data of the
   * dataSourceId given.
   *
   *
   * @param dataSourceId
   *            the data source id
   * @return true, if the return code of the publish action is reponse code
   *         200, otherwise it will return false.
   */
  public boolean publish(String dataSourceId) {
    URL url;
    try {
      url = new URL(pushURL + "?dataSourceId=" + dataSourceId);
      HttpURLConnection httpConnection = (HttpURLConnection) url.openConnection();
      int code = httpConnection.getResponseCode();
      return (code == 200);
    } catch (MalformedURLException e) {
      log.error("error while Publishing dataSourceId: " + dataSourceId, e);
    } catch (IOException e) {
      log.error("error while Publishing dataSourceId: " + dataSourceId, e);
    }
    return false;
  }

  /**
   * Gets the view configuration list.
   *
   * @return the view configuration list
   */
  public List<ViewConfiguration> getViewConfigurationList() {
    List<ViewConfiguration> viewConfigList = null;
    try {
      viewConfigList = odbDAO.getViewConfigurationList();
    } catch (SQLException e) {
      log.error("Getting View configuration Failed..." + e);
    }
    return viewConfigList;
  }

  /**
   * Gets the subscriber data source by.
   *
   * @param subscriberId
   *            the subscriber id
   * @param viewLocationID
   *            the view location id
   * @return the subscriber data source by
   */
  public SubscriberDataSource getSubscriberDataSourceBy(String subscriberId, String viewLocationID) {
    SubscriberDataSource sds = null;
    try {
      sds = odbDAO.getSubscriberDataSourceBy(subscriberId, viewLocationID);
    } catch (SQLException e) {
      log.error("Getting Subscriber DataSource failed for subscriberID:" + subscriberId + " SubsrciptionID:" + viewLocationID + e);
    }
    return sds;
  }

  /**
   * Gets the data source axis info.
   *
   * @param dataSourceID
   *            the data source id
   * @return the data source axis info
   */
  public List<DataSourceAxisInfo> getDataSourceAxisInfo(String dataSourceID) {
    List<DataSourceAxisInfo> dsAxisList = null;
    try {
      dsAxisList = odbDAO.getDataSourceAxisInfo(dataSourceID);
    } catch (SQLException e) {
      log.error("Getting Datasource Axis Info failed for datasoruce ID:" + dataSourceID + e);
    }
    return dsAxisList;
  }

  /**
   * Gets the data source axis detail info list by.
   *
   * @param axisId
   *            the axis id
   * @return the data source axis detail info list by
   */
  public List<DataSourceAxisDetailInfo> getDataSourceAxisDetailInfoListBy(String axisId) {
    List<DataSourceAxisDetailInfo> dsAxisListAll=null;
    try {
      dsAxisListAll = odbDAO.getDataSourceAxisDetailInfoListBy(axisId);
    } catch (SQLException e) {
      log.error("Getting DataSource Axis Details failed for axisid:" + axisId + e);
    }
    return dsAxisListAll;
  }

  public void addSubscription(String subscriberID, String dsID, String graphID, String subDSID) {
    try {
      odbDAO.addSubscribeDataSource(subscriberID, dsID, graphID, subDSID);
    } catch (SQLException e) {
      // TODO Auto-generated catch block
      log.error("Failed to add subscription to subscribers account" + e);;
    }
  }
  public DataSourceInfo getDataSourceInfo(String datasourceId) throws SQLException {
    return odbDAO.getDataSourceByDataSourceID(datasourceId);
  }

  public String getPushURL() {
    return pushURL;
  }

  public void setPushURL(String pushURL) {
    this.pushURL = pushURL;
  }

}
TOP

Related Classes of com.odb.core.service.OpenDashBoard

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.